package com.tz.crm.service;


import com.tz.crm.entity.User;
import com.tz.crm.entity.VisitRecord;
import com.tz.crm.entity.VisitType;
import com.tz.crm.entity.dto.Report;
import com.tz.crm.entity.enumeration.Level;
import com.tz.crm.entity.enumeration.Status;
import com.tz.crm.utils.Pager;

import java.util.Date;
import java.util.List;

/**
 * VisitRecordService 接口
 * 顾客拜访查询以及保存
 */
public interface VisitRecordService extends BaseService<VisitRecord, String> {

    /**
     * 根据客户ID统计出拜访数量
     *
     * @param id 客户ID
     * @return 拜访数量
     */
    int countNumber(String id);

    /**
     * 根据 CustomerId 分页查询拜访记录
     *
     * @param customerId CustomerId
     * @param pager      Pager
     * @return Pager
     */
    Pager<VisitRecord> getByPager(String customerId, Pager pager);

    /**
     * 保存拜访记录
     *
     * @param visitRecord VisitRecord
     * @param customerId  customerId
     * @param owner       User
     */
    void save(VisitRecord visitRecord, String customerId, User owner);

    /**
     * 根据条件分页查询
     *
     * @param onlyFirstVisit 是否第一次拜访
     * @param pager          分页
     * @param visitTypeList  拜访方式
     * @param levelList      客户等级
     * @param ownerList      客户专员
     * @param loginUser      登录用户
     * @param statusList     户的状态
     * @return 分页数据
     */
    Pager<VisitRecord> search(Boolean onlyFirstVisit, Pager pager,
                              List<VisitType> visitTypeList, List<Level> levelList,
                              List<User> ownerList, User loginUser, List<Status> statusList);

    /**
     * report
     *
     * @param ownerList     客户专员
     * @param visitTypeList 拜访方式
     * @param fromDate      开始日期
     * @param toDate        结束日期
     * @param onlyWorkDays  工作日
     * @param user          User
     * @return Report列表
     */
    List<Report> report(List<User> ownerList, List<VisitType> visitTypeList,
                        Date fromDate, Date toDate, Boolean onlyWorkDays, User user);


    /**
     * 根据客户id 删除其拜访记录
     */
    void  delVisitRecordByCusId(String id);

}
